Erfan Panahi 810198369

Final Prohect

Linear Algebra
clc
clear
close all

Problem 2.

img1 = imread('1.tiff');
img1_gray = rgb2gray(img1);
Image_Comparing(img1_gray);
img2 = imread('2.tiff');
img2_gray = rgb2gray(img2);
Image_Comparing(img2_gray);
img3 = imread('3.tiff');
img3_gray = rgb2gray(img3);
Image_Comparing(img3_gray);
img4 = imread('4.tiff');
img4_gray = rgb2gray(img4);
Image_Comparing(img4_gray);
img5 = imread('5.tiff');
img5_gray = rgb2gray(img5);
Image_Comparing(img5_gray);
Image_Comparing_colored(img1);
Image_Comparing_colored(img2);
Image_Comparing_colored(img3);
Image_Comparing_colored(img4);
Image_Comparing_colored(img5);
img1_noisy = imread('1.jpeg');
SVD_denoising_plot(img1_noisy)
img2_noisy = imread('2.jpeg');
SVD_denoising_plot(img2_noisy)
img3_noisy = imread('3.jpeg');
SVD_denoising_plot(img3_noisy)
img4_noisy = imread('4.jpeg');
SVD_denoising_plot(img4_noisy)
img5_noisy = imread('5.jpeg');
SVD_denoising_plot(img5_noisy)
FFT_denoising_plot(img1_noisy)
FFT_denoising_plot(img2_noisy)
FFT_denoising_plot(img3_noisy)
FFT_denoising_plot(img4_noisy)
FFT_denoising_plot(img5_noisy)
function [compressed_img] = compress_img_svd(img, k)
[U,S,V] = svd(double(img));
n = ceil(size(S,2)*k);
S_new = S * diag([ones(1,n) ,zeros(1, size(S,2)-n)]);
compressed_img = uint8(U*S_new*V');
end
function [compressed_img] = compress_img_svd_colored(img, k)
compressed_img = img;
for i = 1:3
compressed_img(:,:,i) = compress_img_svd(img(:,:,i), k);
end
end
function [compressed_img] = compress_img_fft(img, k)
img_f = fft2(img);
img_f_sorted = sort(abs(img_f(:)));
thr = img_f_sorted(ceil((1-k)*length(img_f_sorted)));
img_cmp = ifft2((abs(img_f) > thr) .* img_f);
compressed_img = uint8(img_cmp);
end
function [compressed_img] = compress_img_fft_colored(img, k)
compressed_img = img;
for i = 1:3
compressed_img(:,:,i) = compress_img_fft(img(:,:,i), k);
end
end
function Image_Comparing(img)
K = [12, 10, 8, 4, 1, 0.5, 0.1] / 100;
f = figure;
f.Position = [10 10 5000 1000];
for i = 1:7
subplot(2,7,i)
imshow(compress_img_svd(img, K(i)))
title(['SVD (coff = ',num2str(K(i)),')'],'Interpreter','latex')
subplot(2,7,i+7)
imshow(compress_img_fft(img, K(i)))
title(['FFT (coff = ',num2str(K(i)),')'],'Interpreter','latex')
end
end
function Image_Comparing_colored(img)
K = [12, 10, 8, 4, 1, 0.5, 0.1] / 100;
f = figure;
f.Position = [10 10 5000 1000];
for i = 1:7
subplot(2,7,i)
imshow(compress_img_svd_colored(img, K(i)))
title(['SVD (coff = ',num2str(K(i)),')'],'Interpreter','latex')
subplot(2,7,i+7)
imshow(compress_img_fft_colored(img, K(i)))
title(['FFT (coff = ',num2str(K(i)),')'],'Interpreter','latex')
end
end
function [img_rec] = SVD_denoising(colored_img, thr)
img_rec = colored_img;
for i = 1:size(colored_img,3)
img = colored_img(:,:,i);
[U,S,V] = svd(double(img));
x = diag(S);
y = x(1:end-1)-x(2:end);
S_new = diag(x .* [(y>thr);0]);
img_rec(:,:,i) = uint8(U*S_new*V');
end
end
function SVD_denoising_plot(colored_img)
Thr = [1, 1.5, 2, 2.5, 3];
figure
subplot(2,3,1)
imshow(colored_img)
title('Noisy Image','Interpreter','latex')
for i = 1:length(Thr)
subplot(2,3,i+1)
imshow(SVD_denoising(colored_img, Thr(i)))
title(['SVD denoising (thr = ',num2str(Thr(i)),')'],'Interpreter','latex')
end
end
function [img_rec] = FFT_denoising(colored_img, r)
img_rec = colored_img;
for i = 1:size(colored_img,3)
img = colored_img(:,:,i);
n = floor(r * size(img,2));
img_f = fft2(img);
img_f(:,n:end-n) = 0;
img_f(n:end-n,:) = 0;
img_rec(:,:,i) = uint8(real(ifft2(img_f)));
end
end
function FFT_denoising_plot(colored_img)
R = [0.3, 0.35, 0.4, 0.45, 0.49];
figure
subplot(2,3,1)
imshow(colored_img)
title('Noisy Image','Interpreter','latex')
for i = 1:length(R)
subplot(2,3,i+1)
imshow(FFT_denoising(colored_img, R(i)))
title(['FFT denoising (r = ',num2str(R(i)),')'],'Interpreter','latex')
end
end